perm filename LAUBCH.RNO[VLI,LSP] blob sn#382008 filedate 1978-09-08 generic text, type T, neo UTF8


(READMAC MACRO
(NLAMBDA (F)
    ; TURNS MACRO-CHARS ON WHILE DOING THING;
    ; (READMAC <A-LIST> <THING-TO-DO>);
    ; <A-LIST> HAS PAIRS OF CHAR AND (QUOTED) FUNCTION;
    (COND
     ((CADR F)
      (LET
       (CHAR (CAAADR F) FN (CDAADR F))
       (RPLACO
        F
        'LET
        @
        ((SYNTAX (STATUS SYNTAX =CHAR)
                 FNTYP
                 (FNTYP '=CHAR)
		 OLD
		 (GET '=CHAR FNTYP))
         (PROG2 (SSTATUS MACRO =CHAR =FN)
                (READMAC = (CDADR F) , (CDDR F))
		(FUNCALL 'SSTATUS 'SYNTAX '=CHAR SYNTAX)
		(AND FNTYP (PUTPROP '=CHAR OLD FNTYP))
		; SET STATUS AND RESET AFTERWARDS;)))))
    ; DO THING WITH READ OR READLIST;
    ((RPLACO F (CAADDR F) (CDADDR F))))))


(LET MACRO
(NLAMBDA (F)
    (COND ((CADR F) (RPLACA F 'LET1))
	  ((CDDDR F) (RPLACO F 'PROGN (CDDR F)))
	  ((RPLACO F (CAADDR F) (CDADDR F))))))


(LET1 MACRO
(NLAMBDA (F)
    ((LAMBDA (V)
	 (COND
	  ((NULL (CDDR V))
	   (RPLACO F
		   (CONS 'LAMBDA (CONS (LIST (CAR V)) (CDDR F)))
		   (LIST (CADR V))))
          (V (RPLACO
	      F
	      (CONS 'LAMBDA
		    (CONS (LIST (CAR V))
			  (LIST
			   (CONS 'LET1 (CONS (CDDR V) (CDDR F))))))
	      (LIST (CADR V))))))
     (CADR F))))

(QU* MACRO
(NLAMBDA (X)
    ; LISTS WITH EV OR EV* ARE EVALUATED;
    ; AND THEIR RESULTS WILL BE CONSED;
    ; OR APPENDED RESPECTIVELY;
    ((LAMBDA (Y) (RPLACO X (CAR Y) (CDR Y))) (QU*1 (CADR X)))))

(QU*1 EXPR
(LAMBDA (X)
    (COND
     ((NULL X) NIL)
     ((ATOM X) (LIST 'QUOTE X))
     ((EQ (CAR X) 'EV) (CADR X))
     ((OPTIM
       (COND
	((ATOM (CAR X))
	 (LIST 'CONS (LIST 'QUOTE (CAR X)) (QU*1 (CDR X))))
        ((EQ (CAAR X) 'EV*)
	 (LIST 'APPEND (CADAR X) (QU*1 (CDR X))))
	((LIST 'CONS (QU*1 (CAR X)) (QU*1 (CDR X))))))))))

(OPTIM EXPR
(LAMBDA (X)
    ; ELIMINATES UNNECESSARY FN-CALLS;
    (SELECTQ (CAR X)
       (CONS
	; (CONS X (LIST ---)) => (LIST X ---);
	(COND
	 ((CADDR X)
	  (AND (EQ (CAADDR X) 'LIST)
	       (SETQ X (CONS 'LIST (CONS (CADR X) (CDADDR X))))))
	 ((SETQ X (LIST 'LIST (CADR X))))))
       (APPEND
	; (APPEND X (APPEND ---)) => (APPEND X ---);
	(COND
	 ((CADDR X)
	  (AND (EQ (CAADDR X) 'APPEND)
	       (SETQ X (CONS 'APPEND (CONS (CADR X) (CDADDR X))))))
	 ((SETQ X (CADR X)))))
       NIL)
    (AND (CATCH (MAPC '(LAMBDA (ARG)
			   (COND ((ATOM ARG) (THROW NIL))
				 ((EQ (CAR ARG) 'QUOTE))
				 ((THROW NIL))))
		       (CDR X)))
	 (SETQ X (LIST 'QUOTE (EVAL X)))
	 ; F IS-IN (APPEND CONS LIST);
	 ; (F 'A 'B ---) => 'VALUE;
	 ; WHERE VALUE = (EVAL (F 'A 'B ---));)
    X))




					SEND MORE USEFUL FUNCTIONS)